<?php
/**
 * Created by PhpStorm.
 * User: yunzhi.liu
 * Date: 2020/10/9
 * Time: 11:02
 */

namespace app\middleware;


use app\services\config\ConfigService;
use think\Request;
use WeChatPay\Crypto\AesGcm;

class WxNotify
{
    public function handle(Request $request, \Closure $next)
    {
//        try {
//            $payConfig = ConfigService::getConfigValueArray(['api_v3_secret','mch_id','wechat_app_id']);
//            $apiV3Key = $payConfig['api_v3_secret'];
//            $mchId = $payConfig['mch_id'];
//            $appId = $payConfig['wechat_app_id'];
//
//            //获取返回的xml
//            $inputXml = file_get_contents("php://input");
//            file_put_contents(date('m-d').'wxPayNotifyInfo.txt', '解密前信息：' . $inputXml . PHP_EOL, FILE_APPEND);
//
//            $inBodyArray = (array)json_decode($inputXml, true);
//
//            // 使用PHP7的数据解构语法，从Array中解构并赋值变量
//            ['resource' => [
//                'ciphertext' => $ciphertext,
//                'nonce' => $nonce,
//                'associated_data' => $aad
//            ]] = $inBodyArray;
//
//            // 加密文本消息解密
//            $inBodyResource = AesGcm::decrypt($ciphertext, $apiV3Key, $nonce, $aad);
//            // 把解密后的文本转换为PHP Array数组
//            $result = (array)json_decode($inBodyResource, true);
//
//            file_put_contents(date('m-d').'wxPayNotifyInfo.txt', '解密信息：' . $inBodyResource . PHP_EOL, FILE_APPEND);
//
//            if ($result['mchid'] != $mchId || $result['appid'] != $appId) {
//                throw new \Exception('商户号或APPID错误');
//            }
//            if ($result['trade_state'] != 'SUCCESS') {
//                throw new \Exception('交易状态错误');
//            }
//            $request->order_id = $result['out_trade_no'];
//            $request->transaction_id = $result['transaction_id'];
//        } catch (\Exception $exception) {
//            file_put_contents(date('m-d').'NotifyError.txt', "回调错误:" . $exception->getMessage() . PHP_EOL, FILE_APPEND);
//            return json()->data(['code' => 0, 'msg' => $exception->getMessage(), 'data' => []]);
//        }
        $request->order_id = input('out_trade_no');
        $request->transaction_id = input('out_trade_no');
        return $next($request);
    }
}